<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        function Super(){
            this.props = "Super Props";
        }

        /* 
          父类把公共的方法和要被子类继承的方法定义在原型上
        */
        Super.prototype.getProps = function(){
            console.log(this.props);
        }

        function Sub(){
            this.props = "Sub Props";
        }

        /* 子类将原型对象指向父类 */
        Sub.prototype = new Super();

        /* 访问子类的constructor属性本应该指向子类的构造函数
           但是由于子类的原型对象指向了父类，此时调用子类的constructor属性
           会指向父类的构造方法 这样不好 所以要修改子类的constructor属性指向自身
        */

        /* 注意constructor是原型的属性，要往原型上设置 */
         Sub.prototype.constructor = Sub;
        /* 子类再在自己的原型链上定义方法 */
        Sub.prototype.setProps = function(name){
            this.subProps= name;
        }


        var sub = new Sub();
        /* 子类没有getProps()方法，调用这个方法会访问原型链
           而子类的原型对象Super上定义了getProps()方法
        
        */
        sub.getProps();
        







    </script>
</body>
</html>